/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.etrs.formathlon.vue.jsf.form.user;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import net.etrs.formathlon.control.exception.ExceptionManager;
import net.etrs.formathlon.entity.formation.Inscription;
import net.etrs.formathlon.metier.exception.MetierException;
import net.etrs.formathlon.persistance.formation.InscriptionFacade;
import net.etrs.formathlon.vue.jsf.utils.Confirmable;
import net.etrs.formathlon.vue.jsf.utils.GeneralBean;

/**
 * ManageBean JSF pour les pages traitant de l'administration des userDemandes.
 * @author OPIF
 */
@ManagedBean
@ViewScoped
public class UserDemandeBean extends GeneralBean implements Confirmable {

    @EJB
    private InscriptionFacade facade;
    private List<Inscription> listInscription = new ArrayList<Inscription>();
    private Inscription inscription;
    private boolean modeAutorisation = true;

    /**
     * 
     * @return le nombre des demandes
     */
    public String getNbDemande() {
        StringBuilder retour = new StringBuilder();
        if (getListInscription().size() > 0) {
            retour.append(" (").append(getListInscription().size()).append(")");
        }
        return retour.toString();
    }

    /**
     * Action pour l'autorisation.
     * @param inscription 
     */
    public void autoriser(Inscription inscription) {
        this.inscription = inscription;
        getConfirmationBean().open(this, getMessage("application.UserDemandeBean.autoriser"));
        modeAutorisation = true;
    }

    /**
     * Action pour le refus.
     * @param inscription 
     */
    public void refuser(Inscription inscription) {
        this.inscription = inscription;
        getConfirmationBean().open(this, getMessage("application.UserDemandeBean.refuser"));
        modeAutorisation = false;
    }

    /**
     * Retour de confirmation. La demande est acceptée.
     */
    @Override
    public void confirmer() {
        try {
            if (modeAutorisation) {
                facade.autoriser(getLoginControler().getUtilisateurConnecte(), inscription);
            } else {
                facade.refuser(getLoginControler().getUtilisateurConnecte(), inscription);
            }
            listInscription.remove(inscription);
            displayMessage(getMessage("application.UserDemandeBean.confirmer"));
        } catch (Exception ex) {
            displayErreur(ExceptionManager.traiter(ex));
        }
    }

    /**
     * Retour de confirmation. La demande est annulée.
     */
    @Override
    public void infirmer() {
    }

    /**
     * @return the listInscription
     */
    public List<Inscription> getListInscription() {
        try {
            return facade.getListInscriptionAValider(getLoginControler().getUtilisateurConnecte());
        } catch (MetierException ex) {
            Logger.getLogger(UserDemandeBean.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }

    }
}
